$Description$
有$n$个点,$m$条边,边权为一,每次都可以走$2^k$条边,问最多要走几次
$Solution$
考虑倍增,设$f_{i,j,k}$表示$i$到$j$是否能以走$2^k$条边相互到达。
可以用$Floyd$的方法求出$f$数组。
求完后,若$f_{i,j,k}=1(0\leqslant k\leqslant 64)$,则连一条$i$到$j$的边权为$1$的边
最后再用$Floyd$求出$1$~$n$的最短路即可。
$Code$
1 |
|
有$n$个点,$m$条边,边权为一,每次都可以走$2^k$条边,问最多要走几次
考虑倍增,设$f_{i,j,k}$表示$i$到$j$是否能以走$2^k$条边相互到达。
可以用$Floyd$的方法求出$f$数组。
求完后,若$f_{i,j,k}=1(0\leqslant k\leqslant 64)$,则连一条$i$到$j$的边权为$1$的边
最后再用$Floyd$求出$1$~$n$的最短路即可。
1 | #include <bits/stdc++.h> |